// compile:
// run:
#include <iostream>

using namespace std;
class Base {
 public:
  inline virtual void vfunc() { cout << "Base::vfunc()" << endl; }
  void func1() { cout << "Base::func1()" << endl; }
  void func2() { cout << "Base::func2()" << endl; }

 private:
};
class Derived : public Base {
 public:
  void vfunc() override { cout << "Derived::vfunc()" << endl; }
  void func1() { cout << "Derived::func1()" << endl; }
  void func2() { cout << "Derived::func2()" << endl; }

 private:
};

void Test1() {
  Base* p = new Derived;
  Derived d;
  //   p->func1();
  //   p->func2();
  d.Base::func1();
  d.Base::func2();
  d.Base::vfunc();
  d.func1();
  d.func2();
  d.vfunc();
  delete p;
}
void Test2() {}
int main() {
  Test1();
  Test2();
  return 0;
}
